package mx.com.mindbits.bandpay.business;

import mx.com.mindbits.bandpay.dao.BandPayDAO;
import mx.com.mindbits.bandpay.utils.ConstantsValues;
import mx.com.mindbits.bandpay.utils.Utils;
import mx.com.mindbits.bandpay.vo.TAECompraVO;
import mx.com.mindbits.bandpay.vo.TAETransactionResponse;
import mx.com.mindbits.bridge.Blowfish;
import mx.com.mindbits.dao.transactions;

import android.content.Context;
import android.util.Log;


public class TransactionBusiness {
		
	private BandPayDAO bandPayDAO;
	private transactions transaction;
	
	public TransactionBusiness(Context ctx) {
		bandPayDAO = new BandPayDAO(ctx);
	}
	
	public boolean insertTransaction(TAECompraVO compraReceived, boolean isTae){
		transaction = new transactions();		
		transaction.set_id_transaccion(null);
		if (isTae){
			transaction.setMonto(Double.valueOf(compraReceived.getMonto()));
			transaction.setComision(ConstantsValues.MONTO_RECARGA);
			transaction.setProveedor(Integer.parseInt(compraReceived.getProveedor()));
			transaction.setProducto(Integer.parseInt(compraReceived.getProducto()));			
			transaction.setDescripcion(ConstantsValues.RECARGA_TAE);
			transaction.setNumeroTae(Long.valueOf(compraReceived.getNumbertae()));
			transaction.setIsTae(true);
		}else{
			transaction.setMonto(Double.valueOf(compraReceived.getMonto()));
			transaction.setComision(ConstantsValues.MONTO_RECARGA);
			transaction.setProveedor(0);
			transaction.setProducto(Integer.valueOf(ConstantsValues.MW_TRANSACTION_STORED_DEFAULT));
			transaction.setDescripcion(compraReceived.getProducto());
			transaction.setNumeroTae((long) 0);
			transaction.setIsTae(false);
		}				
		transaction.setLat(Double.valueOf(compraReceived.getCx()));
		transaction.setLon(Double.valueOf(compraReceived.getCy()));
		transaction.setEstatus(Integer.valueOf(ConstantsValues.MW_TRANSACTION_STORED_DEFAULT));
		transaction.setFecha(Utils.stringToDate(Utils.getdayDate()));
		transaction.setHora(Utils.getHourDate());
		Log.i("HORA",Utils.getHourDate());		
		return bandPayDAO.insertTransactions(transaction);
	}
	
	public TAETransactionResponse updateTransactionCommingMW(String jsonEncoded){
		Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, 
				"Inicio del proceso de negocio que actualiza el registro de compra con la respuesta del web service");
		
		TAETransactionResponse taeResponse = null;
		
		try {
			
			String resultado = Blowfish.decode(jsonEncoded);
			Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, "resultado enviado por el web service: " + resultado);											

			if(resultado != null && !resultado.isEmpty() && !resultado.equals("") && !resultado.equals("null")){
											
				taeResponse = Utils.parseJSONTAE(resultado);
				
				transactions transaction = bandPayDAO.getLastTransaction();
				Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, "Last transaction ID:  " + transaction.get_id_transaccion());
																			
				Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, "VALOR error code ["+taeResponse.getCodigoError()+"]");
				Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, "VALOR ["+taeResponse.getFolio()+"]");
				Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, "VALOR ["+taeResponse.getMensaje()+"]");
				Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, "VALOR ["+taeResponse.getResultado()+"]");
				
				if(taeResponse.getCodigoError().equals(ConstantsValues.MW_TRANSACTION_STORED_SUCCESS)){
					Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, 
							"El resultado enviado del MW fue de e" + taeResponse.getCodigoError() );
					transaction.setEstatus(Integer.valueOf(ConstantsValues.MW_TRANSACTION_STORED_SUCCESS));
					transaction.setFolio_bandpay(Long.parseLong(taeResponse.getFolioAddcel()));
					
				}else{
					Log.d(ConstantsValues.TAG_BUISNESS_PROCESS, 
							"El resultado enviado del MW fue de error" + taeResponse.getCodigoError());					
					transaction.setEstatus(Integer.valueOf(ConstantsValues.MW_TRANSACTION_STORED_ERROR));					
				}
				bandPayDAO.updateTransaction(transaction);
				taeResponse.setMensaje("El estatus de su transaccion es: \n" + taeResponse.getMensaje());				
			}
			
		} catch (Exception e) {
			Log.e(ConstantsValues.TAG_TAEFORM, "ERROR: " + e);
		}
		return taeResponse;
	}
	
}
